package com.cmyshare.design.compositePattern;

import java.util.List;

/**
 * @Author cmy
 * @Date 2025/7/5 17:56
 * @version 1.0
 * @desc 组合模式测试类
 */
public class CompositeTest {
    /**
     * 个人总结：
     * 将对象组合成树形结构以表示"部分-整体"的层次结构。"Composite使得用户对单个对象和组合对象的使用具有一致性。
     *
     * 对象创建：创建了一个 ProjectManager 对象（组合构件）、一个 ProjectAssistant 对象和两个 Programmer 对象（叶子构件），它们都通过 Employer 类型引用，体现了组合模式中统一接口的特性。
     * 对象组合：调用 ProjectManager 的 add 方法，将 ProjectAssistant 和 Programmer 对象添加到 ProjectManager 的下属列表中，构建出树形结构。
     * 遍历操作：调用 ProjectManager 的 getEmployers 方法获取下属列表，然后使用增强 for 循环遍历列表，调用每个下属的 getName 方法。无论是组合构件还是叶子构件，都能以一致的方式被处理。
     *
     * 该示例通过定义抽象类 Employer，实现组合构件 ProjectManager 和叶子构件 ProjectAssistant、Programmer，并在 main 方法中进行对象创建、组合和遍历操作，完整地展示了组合模式的应用。
     * @param args
     */
    public static void main(String[] args) {
        // 对象创建
        Employer pm=new ProjectManager("项目经理");
        Employer pa=new ProjectAssistant("项目助理");
        Employer programmer1=new Programmer("程序员一");
        Employer programmer2=new Programmer("程序员二");

        //对象组合，调用 ProjectManager 类的 add 方法，将项目助理和程序员添加到项目经理的下属列表中，构建了一个简单的树形结构。
        pm.add(pa);//为项目经理添加项目助理
        pm.add(programmer2);//为项目经理添加程序员

        List<Employer> ems=pm.getEmployers();
        for(Employer em:ems){
            System.out.println(em.getName());
        }
    }
}
